/**
 * 
 */
package br.com.sistransporte.transite.tabelahorario.dao;

import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;

import br.com.sistransporte.transitevo.tabelahorario.model.TabelaHorarioVO;
import br.com.src.masterpersistence.dao.GenericDAO;
import br.com.src.masterpersistence.exceptions.AlterarException;
import br.com.src.masterpersistence.exceptions.ExcluirException;
import br.com.src.masterpersistence.exceptions.FiltrarException;
import br.com.src.masterpersistence.exceptions.HibernatePersistenceException;
import br.com.src.masterpersistence.exceptions.InserirException;
import br.com.src.masterpersistence.utilidades.FabricaMensagensLog;
import br.com.src.masterpersistence.utilidades.Paginacao;
import br.com.src.utilidades.exceptions.DesconhecidoException;

/**
 * Classe que representa
 *
 *
 * @author Nelson Luis da Silva Junior <nelson.jr13@hotmail.com>
 * @since 18 de Set de 2013 01:49:57
 * @version 1.0
 */
public class TabelaHorarioDAOImpl extends GenericDAO< TabelaHorarioVO > implements TabelaHorarioDAOService{

	public TabelaHorarioDAOImpl(String typeSessionFactory) {
		super(typeSessionFactory);
		logger.info( FabricaMensagensLog.getMensagemLogConstrutor("TabelaHorarioDAOImpl") );
	}

	
	public ArrayList<TabelaHorarioVO> filtrar(TabelaHorarioVO vo, boolean isDisticnt,boolean isLike) throws FiltrarException {
		logger.info( FabricaMensagensLog.getMensagemLogInicio("TabelaHorarioDAOImpl") );
		try {
			ArrayList< TabelaHorarioVO > lista = filter( vo, isDisticnt, isLike );
			logger.info( FabricaMensagensLog.getMensagemLogTermino( "TabelaHorarioDAOImpl" ) );
			return lista;
		} catch ( IllegalArgumentException e ) {
			logger.info( FabricaMensagensLog.getMensagemLogErro("TabelaHorarioDAOImpl", e ) );
			throw new FiltrarException( e.getMessage(), e );
		} catch ( IllegalAccessException e ) {
			logger.info( FabricaMensagensLog.getMensagemLogErro( "TabelaHorarioDAOImpl", e ) );
			throw new FiltrarException( e.getMessage(), e );
		} catch ( InvocationTargetException e ) {
			logger.info( FabricaMensagensLog.getMensagemLogErro( "TabelaHorarioDAOImpl", e ) );
			throw new FiltrarException( e.getMessage(), e );
		} catch ( Exception e ) {
			logger.info( FabricaMensagensLog.getMensagemLogErro( "TabelaHorarioDAOImpl", new DesconhecidoException( e.getMessage(), e ) ) );
			throw new FiltrarException( e.getMessage(), e );
		}
	}

	public TabelaHorarioVO inserir(TabelaHorarioVO vo) throws InserirException {
		try {
			logger.info( FabricaMensagensLog.getMensagemLogInicio( "TabelaHorarioDAOImpl" ) );
			TabelaHorarioVO objetoPersistido = (TabelaHorarioVO) insert( vo );
			logger.info( FabricaMensagensLog.getMensagemLogTermino( "TabelaHorarioDAOImpl" ) );
			return objetoPersistido;
		} catch ( HibernatePersistenceException e ) {
			logger.info( FabricaMensagensLog.getMensagemLogErro( "TabelaHorarioDAOImpl", e ) );
			throw new InserirException( e.getMessage(), e );
		}
	}

	
	public void alterar(TabelaHorarioVO vo) throws AlterarException {
		logger.info( FabricaMensagensLog.getMensagemLogInicio( "TabelaHorarioDAOImpl" ) );
		try {
			update( vo );
		} catch ( HibernatePersistenceException e ) {
			logger.info( FabricaMensagensLog.getMensagemLogErro("TabelaHorarioDAOImpl", e ) );
			throw new AlterarException( e.getMessage(), e );
		}
		logger.info( FabricaMensagensLog.getMensagemLogTermino("TabelaHorarioDAOImpl" ) );
	    
		
	}

	
	public void excluir(TabelaHorarioVO vo) throws ExcluirException {
		logger.info( FabricaMensagensLog.getMensagemLogInicio( "TabelaHorarioDAOImpl" ) );
		try {
			delete( vo );
		} catch ( HibernatePersistenceException e ) {
			logger.info( FabricaMensagensLog.getMensagemLogErro( "TabelaHorarioDAOImpl", e ) );
			throw new ExcluirException( e.getMessage(), e );
		}
		logger.info( FabricaMensagensLog.getMensagemLogTermino( "TabelaHorarioDAOImpl" ) );
	}

	
	public ArrayList<TabelaHorarioVO> filtrarPaginacao(Paginacao<TabelaHorarioVO> pagination, TabelaHorarioVO vo, boolean isDisticnt,	boolean isLike) throws FiltrarException {
		logger.info( FabricaMensagensLog.getMensagemLogInicio( "TabelaHorarioDAOImpl" ) );
		try {
			ArrayList< TabelaHorarioVO > lista = paginacao( pagination, vo, isDisticnt, isLike );
			logger.info( FabricaMensagensLog.getMensagemLogTermino( "TabelaHorarioDAOImpl" ) );
			return lista;
		} catch ( IllegalArgumentException e ) {
			logger.info( FabricaMensagensLog.getMensagemLogErro( "TabelaHorarioDAOImpl", e ) );
			throw new FiltrarException( e.getMessage(), e );
		} catch ( IllegalAccessException e ) {
			logger.info( FabricaMensagensLog.getMensagemLogErro( "TabelaHorarioDAOImpl", e ) );
			throw new FiltrarException( e.getMessage(), e );
		} catch ( InvocationTargetException e ) {
			logger.info( FabricaMensagensLog.getMensagemLogErro( "TabelaHorarioDAOImpl", e ) );
			throw new FiltrarException( e.getMessage(), e );
		} catch ( Exception e ) {
			logger.info( FabricaMensagensLog.getMensagemLogErro( "TabelaHorarioDAOImpl", new DesconhecidoException( e.getMessage(), e ) ) );
			throw new FiltrarException( e.getMessage(), e );
		}
		
	}
	
	@Override
    public Integer getTotalCadastrados( TabelaHorarioVO entidade, boolean isDisticnt, boolean isLike ) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException {
		return super.getTotalCadastrados( entidade, isDisticnt, isLike );
	    
    }
}
